#ifndef _YEP_ENGINE_SCENE_HANDLER_HPP
#define _YEP_ENGINE_SCENE_HANDLER_HPP

#include "../common.hpp"
namespace yep
{
class Event; // Foward declaration
/**
 * @brief Handle scene events.
 *
 * The most important is the creation and destroying of the own object.
 *  It also handles the scene's and game's creation and destroying.
 *
 * Like is default on all handlers, all events overriding are optional.
 **/
class Entity
{
public:
    /**
     * @brief Virtual destructor. To avoid annoying warnings.
     **/
    virtual ~Entity(){}

    /**
     * @brief Happens when the object is added to a Scene.
     **/
    virtual void evCreate(Event &event){}

    /**
     * @brief Happens when the object is removed from a Scene.
     **/
    virtual void evDestroy(Event &event){}

    /**
     * @brief Happens if the object is added on the Scene::setup()
     **/
    virtual void evSceneBegin(Event &event){}

    /**
     * @brief Happens if the object is removed on the Scene::cleanup()
     **/
    virtual void evSceneEnd(Event &event){}

    /**
     * @brief Happens if it is the first scene and the object is added on Scene::setup()
     **/
    virtual void evGameBegin(Event &event){}

    /**
     * @brief Happens if it is the last scene and the object is removed on Scene::cleanup()
     **/
    virtual void evGameEnd(Event &event){}
};

}

#endif // _YEP_ENGINE_SCENE_HANDLER_HPP

